package org.execute.tool.文件处理;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
public class FileListWriter {
    private static final Logger logger = Logger.getLogger(FileListWriter.class.getName());
    /**
     将字符串列表写入指定文件
     @param filePath 目标文件路径
     @param listS 要写入的字符串列表
     @return 写入成功返回 true，否则返回 false
     */
    public static boolean writeListToFile (String filePath, List<String> listS) {
// 校验参数
        if (filePath == null || filePath.trim ().isEmpty ()) {
            logger.warning ("文件路径不能为空");
            return false;
        }
        if (listS == null) {
            logger.warning ("要写入的列表不能为 null");
            return listS.isEmpty (); // 如果列表为 null 返回 false，空列表视为写入成功
        }
        BufferedWriter writer = null;
        try {
// 确保父目录存在
            File file = new File (filePath);
            if (file.getParentFile () != null && !file.getParentFile ().exists ()) {
                Files.createDirectories (Paths.get (file.getParent ()));
                logger.info("创建了不存在的父目录:" + file.getParent ());
            }
// 使用 UTF-8 编码写入文件
            writer = new BufferedWriter (
                    new OutputStreamWriter (
                            new FileOutputStream (file),
                            StandardCharsets.UTF_8
                    )
            );
// 逐行写入列表内容
            for (String line : listS) {
// 处理 null 元素，避免写入 "null" 字符串
                if (line != null) {
                    writer.write (line);
                }
                writer.newLine (); // 换行
            }
            logger.info("成功将" + listS.size () + "行数据写入文件:" + filePath);
            return true;
        } catch (Exception e) {
            logger.log (Level.SEVERE, "写入文件失败:" + filePath, e);
            return false;
        } finally {
// 确保资源关闭
            if (writer != null) {
                try {
                    writer.close ();
                } catch (Exception e) {
                    logger.log (Level.WARNING, "关闭文件写入流时发生错误", e);
                }
            }
        }
    }
}